﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
//Librerias Necesarias Para Redimensionar Imagenes
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Security.Permissions;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.Configuration;


namespace FONCREAGROINTEGRAL.Controllers
{
    public class personalController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();

        public FONCREAGROINTEGRAL.Models.PERSONAL PERSONAL
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public static Image ResizeImage(Image srcImage, int newWidth, int newHeight)
            {
                System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(newWidth, newHeight);
                System.Drawing.Graphics.FromImage((System.Drawing.Image)resizedImage).DrawImage(srcImage, 0, 0, newWidth, newHeight);
                return (resizedImage);
            }

        public ActionResult IndexByIdEdit(int id)
         {
            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal == id);

            var result = (from p in query.ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          join bh in entidades.BANCOes on p.IdBancoHaberes equals bh.IdBanco into lbh
                          from x in lbh.DefaultIfEmpty()
                          join bcts in entidades.BANCOes on p.IdBancoCTS equals bcts.IdBanco into lbcts
                          from y in lbcts.DefaultIfEmpty()
                          select new
                          {
                              IdPersonal = p.IdPersonal,
                              ApePaterno = p.ApePaterno,
                              ApeMaterno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              IdNacionalidad = p.IdNacionalidad,
                              Nacionalidad=n.Nacionalidad1,
                              LugarNacimiento = p.LugarNacimiento,
                              IdTipoDI = p.IdTipoDI,
                              Descripcion = di.Descripcion,
                              NroDI = p.NroDI,
                              Direccion = p.Direccion,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Sexo = p.Sexo,
                              EstadoCivil = p.EstadoCivil,
                              EsSalud=p.EsSalud,
                              LicenciaConducir = p.LicenciaConducir,
                              TipoSangre = p.TipoSangre,
                              Discapacidad = p.Discapacidad,
                              Telefonocasa = p.Telefonocasa,
                              Celularpersonal = p.Celularpersonal,
                              Emailpersonal = p.Emailpersonal,
                              TelefenosIns = p.TelefenosIns,
                              Fotocheck = p.Fotocheck,
                              EmailCoorporativo = p.EmailCoorporativo,
                              ContactoEmergencia = p.ContactoEmergencia,
                              TelefonoContacto = p.TelefonoContacto,
                              IdBancoHaberes = p.IdBancoHaberes,
                              BancoHaberes = (x == null ? String.Empty : x.Nombre),
                              CtaHaberes = p.CtaHaberes,
                              IdBancoCTS = p.IdBancoCTS,
                              BancoCTS = (y == null ? String.Empty : y.Nombre),
                              CtaCTS = p.CtaCTS,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult IndexActivos()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            string apnombres = Convert.ToString(Request.QueryString["query"]);

            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }

         /*   var query = entidades.PERSONALs
                .Join(entidades.PERIODOLABORALs, p => p.IdPersonal, pl => pl.IdPersonal,(p ,pl )=>new { p.IdPersonal,
                p.ApePaterno,p.ApeMaterno,p.Nombres,p.IdTipoDI,p.IdNacionalidad,p.Direccion,p.Sexo,p.FechaNacimiento,p.Fotocheck,
                p.NroDI,p.TipoSangre,p.Celularpersonal,p.TelefenosIns,pl.IdMotivoFinDePeriodo})
                .Where(p => p.IdMotivoFinDePeriodo == null);
            */


            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal >= 1);

            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).Skip(start).Take(limit).ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal = p.Celularpersonal,
                              Celularins = p.TelefenosIns,
                             }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Index()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);


            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0,30);
                char[] MyChar = { '\\', '"' ,'}',']','[','}'};
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
           }


            var query = entidades.PERSONALs
             .Join(entidades.PERIODOLABORALs, p => p.IdPersonal, pl => pl.IdPersonal, (p, pl) => new
             {
                        p.IdPersonal,
                        p.ApePaterno,
                        p.ApeMaterno,
                        p.Nombres,
                        p.IdTipoDI,
                        p.IdNacionalidad,
                        p.Direccion,
                        p.Sexo,
                        p.FechaNacimiento,
                        p.Fotocheck,
                        p.NroDI,
                        p.TipoSangre,
                        p.Celularpersonal,
                        p.TelefenosIns,
                        pl.IdMotivoFinDePeriodo
                })
                .Where(p => p.IdMotivoFinDePeriodo == null);

            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " +p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p =>p.ApePaterno+" "+p.ApeMaterno+" "+p.Nombres).Skip(start).Take(limit).ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " +p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal= p.Celularpersonal,
                              Celularins = p.TelefenosIns,
                              estado = (p.IdMotivoFinDePeriodo == null ? "[Activo]" : "[Inactivo]")

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult IndexById(int id)
        {
            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal == id);

            var result = (from p in query.ToList()
                          join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          select new
                          {
                              Id = p.IdPersonal,
                              Paterno = p.ApePaterno,
                              Materno = p.ApeMaterno,
                              Nombres = p.Nombres,
                              ApeNombre = p.ApePaterno.Trim() + " " + p.ApeMaterno.Trim() + " " + p.Nombres,
                              Direccion = p.Direccion,
                              Sexo = p.Sexo,
                              FechaNacimiento = string.Format("{0:d}", p.FechaNacimiento),
                              Fotocheck = p.Fotocheck,
                              Tipodi = di.Descripcion,
                              Nrodi = p.NroDI,
                              Tiposangre = p.TipoSangre,
                              Celularpersonal = p.Celularpersonal,
                              Celularins = p.TelefenosIns,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        // GET: /personal/directorio

        public ActionResult directorioActivos() {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
                if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }
            var query = entidades.RHRepDirectorioPersonal_Result(1).ToList();
            //if (!String.IsNullOrEmpty(apnombres))
            //{
            //    query = query.Where(p => p.Personal.Contains(apnombres.ToUpper()));
            //}
            var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                         select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Personal,
                              Area = p.Proyecto,
                              NumTelf = p.Telefono,
                              CelPer = p.Celular,
                              CelInst = p.Fotocheck,
                              Email = p.Email,
                              NroContrato = p.NroContrato,
                              FechaInicio = string.Format("{0:d}", p.fechainicio),
                              FechaFin = string.Format("{0:d}", p.fechafin),
                              Estado = (p.Estado)

                          }).ToList();
            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
  
        public ActionResult directorio()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }
            var query = entidades.RHRepDirectorioPersonal_Result(0).ToList();
            //if (!String.IsNullOrEmpty(apnombres))
            //{
            //    query = query.Where(p => p.Personal.Contains(apnombres.ToUpper()));
            //}
            var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Personal,
                              Area = p.Proyecto,
                              NumTelf = p.Telefono,
                              CelPer = p.Celular,
                              CelInst = p.Fotocheck,
                              Email = p.Email,
                              NroContrato = p.NroContrato,
                              FechaInicio = string.Format("{0:d}", p.fechainicio),
                              FechaFin = string.Format("{0:d}", p.fechafin),
                              Estado = (p.Estado)

                          }).ToList();
            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        //
        // GET: /personal/directorio
        /*public ActionResult jefesarea()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Where(p => p.IdPersonal >= 1);
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.ApePaterno).Skip(start).Take(limit).ToList()
                          //join di in entidades.TIPODOCUMENTOIDENTIDADs on p.IdTipoDI equals di.IdTipoDI
                          //join n in entidades.NACIONALIDADs on p.IdNacionalidad equals n.IdNacionalidad
                          join cap in entidades.CONTRATOADENDAPERSONALs on p.IdPersonal equals cap.IdPersonal //into lmfp from x in lmfp.DefaultIfEmpty()
                          join posp in entidades.POSICIONPERSONAs on 
                          join pos in entidades.POSICIONs on cap.IdPosicion equals pos.IdPosicion
                          join ar in entidades.AREAs on pos.IdArea equals ar.IdArea
                          where cap.estado == true && pos.IdCargo == 5
                          select new
                          {
                              Id = p.IdPersonal,
                              NomApe = p.Nombres + " " + p.ApePaterno + " " + p.ApeMaterno,
                              Area = ar.Nombre,
                              NumTelf = p.Telefonocasa,
                              CelPer = p.Celularpersonal,
                              CelInst = p.TelefenosIns,
                              Email = p.EmailCoorporativo,

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }*/
        //
        // GET: /personal/Details/5

        public ActionResult Guardianes()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Join(entidades.POSICIONPERSONAs, p => p.IdPersonal, pp => pp.IdPersonal, (p, pp) => new
                {
                    p.IdPersonal,
                    personal = p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres,
                    p.NroDI,
                    pp.estado,
                    pp.IdPosicion
                })
                .Where(p => p.estado == true)
                .Join(entidades.POSICIONs, p => p.IdPosicion, pos => pos.IdPosicion, (p, pos) => new { 
                    p.IdPersonal,
                    p.personal,
                    pos.IdCargo,
                    p.NroDI
                   })
                .Where(p => p.IdCargo == 114 );
                
                
            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.personal).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.personal,
                              Dni = p.NroDI

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        /*public ActionResult PrestamoAutorizado()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.PERSONALs
                .Join(entidades.POSICIONPERSONAs, p => p.IdPersonal, pp => pp.IdPersonal, (p, pp) => new
                {
                    p.IdPersonal,
                    Personal = p.ApePaterno + " " + p.ApeMaterno + " " + p.Nombres,
                    p.NroDI,
                    pp.estado,
                    pp.IdPosicion
                })
                .Where(p => p.estado == true);


            if (!String.IsNullOrEmpty(apnombres))
            {
                query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper()));
            }
            var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.Personal,
                              Dni = p.NroDI

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }*/


        public ActionResult PersonalActivo()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            string apnombres = Convert.ToString(Request.QueryString["query"]);
            int IdProyecto = Convert.ToInt32(Request.QueryString["IdProyecto"]);

            if (IdProyecto == 0) {
                IdProyecto = -1;
            }
            var query = entidades.PAPersonalByIdProyecto(IdProyecto).ToList();

            if (!String.IsNullOrEmpty(apnombres))
            {
                //query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper()));
                query = query.Where(p => (p.Personal).ToUpper().Contains(apnombres.ToUpper())).ToList();
            }
            var result = query.Skip(start).Take(limit).ToList();

            /*var result = (from p in query.OrderBy(p => p.Personal).Skip(start).Take(limit).ToList()
                          select new
                          {
                              Id = p.IdPersonal,
                              Personal = p.Personal,
                              Dni = p.NroDI

                          }).ToList();*/

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /personal/Create

        //public ActionResult Create()
        //{
        //    var query = entidades.NACIONALIDADs.Select(n => new { n.IdNacionalidad, n.Nacionalidad1 }).OrderBy(n => n.Nacionalidad1);
        //    ViewData["IdNacionalidad"] = new SelectList(query.AsEnumerable(), "IdNacionalidad", "Nacionalidad1", 10);

        //    var query1 = entidades.TIPODOCUMENTOIDENTIDADs.Select(tdi => new { tdi.IdTipoDI, tdi.Descripcion }).OrderBy(tdi => tdi.IdTipoDI);
        //    ViewData["IdTipoDI"] = new SelectList(query1.AsEnumerable(), "IdTipoDI", "Descripcion", 1);

        //    List<SelectListItem> sexo = new List<SelectListItem>();
        //    sexo.Add(new SelectListItem { Text = "MASCULINO", Value = "M" });
        //    sexo.Add(new SelectListItem { Text = "FEMENINO", Value = "F" });
        //    ViewData["Sexo"] = new SelectList(sexo.AsEnumerable(), "value", "text");

        //    List<SelectListItem> estadocivil = new List<SelectListItem>();
        //    estadocivil.Add(new SelectListItem { Text = "SOLTERO(A)", Value = "SOLTERO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CASADO(A)", Value = "CASADO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CONVIVIENTE", Value = "CONVIVIENTE" });

        //    ViewData["EstadoCivil"] = new SelectList(estadocivil.AsEnumerable(), "value", "text");
            
        //    //
        //    List<SelectListItem> Discapacidad = new List<SelectListItem>();
        //    Discapacidad.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    Discapacidad.Add(new SelectListItem { Text = "SI", Value = "true" });
        //    ViewData["Discapacidad"] = new SelectList(Discapacidad.AsEnumerable(), "value", "text");

        //    return View();
        //} 

        //
        // POST: /personal/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, PERSONAL PERSONAL, HttpPostedFileBase Archivofotox, HttpPostedFileBase Archivogs)
        {
            string strResponse = String.Empty;
            try{
                var cpersonal = new PERSONAL();
                if (ModelState.IsValid)
                {
                    string grupos2 = "";//Archivofoto.FileName.ToString();
                    string grupos = "";//Archivogs.FileName.ToString();
                    if (Archivogs != null)
                    {
                        grupos2 = Archivogs.FileName.ToString();
                        if (grupos2.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            TryUpdateModel(cpersonal, collection.ToValueProvider());
                            entidades.AddToPERSONALs(cpersonal);
                            entidades.SaveChanges();
                            Archivogs.SaveAs(Server.MapPath("~/Content/RRHH/GrupoSanguineo/") + Convert.ToString(cpersonal.IdPersonal) + ".pdf");
                        }
                        else
                        {
                            strResponse = "{success: false,msg:'El grupo sanguíneo debe ser formato pdf'}";
                            return Content(strResponse);
                        }
                    }
                    else {

                        TryUpdateModel(cpersonal, collection.ToValueProvider());
                        entidades.AddToPERSONALs(cpersonal);
                        entidades.SaveChanges();
                    }
                    //Guardar Foto
                    if (Archivofotox != null)
                    {
                        Archivofotox.SaveAs(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                        //Image srcImage = Image.FromFile(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)));
                        System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)), System.IO.FileMode.Open);
                        Image srcImage = Image.FromStream(fs);
                        var ancho = srcImage.Width;
                        var alto = srcImage.Height;
                        /////Establecer ancho nuevo
                        var nuevoancho = 70;
                        var nuevoalto = 80;
                        Image image = ResizeImage(srcImage, nuevoancho, nuevoalto);
                        image.Save(Server.MapPath("~/Content/RRHH/Fotos/" + Convert.ToString(cpersonal.IdPersonal) + ".jpg"));

                        fs.Close();
                        System.IO.File.Delete(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                    }

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);
                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }
        
        //
        // GET: /personal/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    var epersonal = entidades.PERSONALs.Single(p => p.IdPersonal == id);

        //    var query = entidades.NACIONALIDADs.Select(n => new { n.IdNacionalidad, n.Nacionalidad1 }).OrderBy(n => n.Nacionalidad1);
        //    ViewData["IdNacionalidad"] = new SelectList(query.AsEnumerable(), "IdNacionalidad", "Nacionalidad1", epersonal.IdNacionalidad);

        //    var query1 = entidades.TIPODOCUMENTOIDENTIDADs.Select(tdi => new { tdi.IdTipoDI, tdi.Descripcion }).OrderBy(tdi => tdi.IdTipoDI);
        //    ViewData["IdTipoDI"] = new SelectList(query1.AsEnumerable(), "IdTipoDI", "Descripcion", epersonal.IdTipoDI);

        //    List<SelectListItem> sexo = new List<SelectListItem>();
        //    sexo.Add(new SelectListItem { Text = "MASCULINO", Value = "M" });
        //    sexo.Add(new SelectListItem { Text = "FEMENINO", Value = "F" });
        //    ViewData["Sexo"] = new SelectList(sexo.AsEnumerable(), "value", "text", epersonal.Sexo);

        //    List<SelectListItem> estadocivil = new List<SelectListItem>();
        //    estadocivil.Add(new SelectListItem { Text = "SOLTERO(A)", Value = "SOLTERO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CASADO(A)", Value = "CASADO(A)" });
        //    estadocivil.Add(new SelectListItem { Text = "CONVIVIENTE", Value = "CONVIVIENTE" });

        //    ViewData["EstadoCivil"] = new SelectList(estadocivil.AsEnumerable(), "value", "text", epersonal.EstadoCivil);

        //    //
        //    List<SelectListItem> Discapacidad = new List<SelectListItem>();
        //    Discapacidad.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    Discapacidad.Add(new SelectListItem { Text = "SI", Value = "true" });
        //    ViewData["Discapacidad"] = new SelectList(Discapacidad.AsEnumerable(), "value", "text", epersonal.Discapacidad);

        //    return View(epersonal);
        //}

        //
        // POST: /personal/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, PERSONAL PERSONAL, HttpPostedFileBase Archivofotox, HttpPostedFileBase Archivogs)
        {
            string strResponse = String.Empty;
            var epersonal = entidades.PERSONALs.Single(p => p.IdPersonal == id);

        try
            {
                if (ModelState.IsValid)
                {
                    //epersonal.ApePaterno = apepaterno;
                    TryUpdateModel(epersonal);
                    entidades.SaveChanges();

                    string nombre = "";//Archivofoto.FileName.ToString();
                    string grupos = "";//Archivogs.FileName.ToString();

                    if (Archivofotox != null) { 
                        
                        nombre = Archivofotox.FileName.ToString();
                        if (nombre.EndsWith(".jpg") || nombre.EndsWith(".JPG") || nombre.EndsWith(".jpeg") || nombre.EndsWith(".JPEG"))
                        {
                            Archivofotox.SaveAs(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                            //Image srcImage = Image.FromFile(Server.MapPath("~/Content/RRHH/Fotos/Temporales/" + Path.GetFileName(Archivofotox.FileName)));
                            System.IO.FileStream fs = new System.IO.FileStream(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName), System.IO.FileMode.Open);
                            Image srcImage = Image.FromStream(fs);
                            var ancho = srcImage.Width;
                            var alto = srcImage.Height;
                            /////Establecer ancho nuevo
                            /////Establecer ancho nuevo
                            var nuevoancho = 70;
                            var nuevoalto = 80;
                            Image image = ResizeImage(srcImage, nuevoancho, nuevoalto);
                            image.Save(Server.MapPath("~/Content/RRHH/Fotos/" + Convert.ToString(epersonal.IdPersonal) + ".jpg"));
                            fs.Close();
                            System.IO.File.Delete(Server.MapPath("~/Content/RRHH/Fotos/Temporales/") + Path.GetFileName(Archivofotox.FileName));
                        }
                    
                    }
                    string grupos2 = "";
                    if (Archivogs != null)
                    {
                        grupos2 = Archivogs.FileName.ToString();
                        if (grupos2.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            Archivogs.SaveAs(Server.MapPath("~/Content/RRHH/GrupoSanguineo/") + Convert.ToString(epersonal.IdPersonal) + ".pdf");
                        }
                        else{
                            strResponse = "{success: false,msg:'El grupo sanguíneo debe ser formato pdf'}";
                            return Content(strResponse);
                        }
                    }

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);

                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        //
        // GET: /personal/Delete/5
 /*
        public ActionResult Delete(int id)
        {
            return View();
        }
        */
        //
        // POST: /personal/Delete/5

        public ActionResult Delete(int id, FormCollection collection)
        {
            string strResponse = String.Empty;
            var contratos = 0;
            var periodoLaboral= 0;
            var epersonal = entidades.PERSONALs.Single(e => e.IdPersonal == id);
            //var contratos = entidades.CONTRATOADENDAPERSONALs.Single(c =>c.idcontratoadendapersonal==epersonal.IdPersonal);
            contratos = entidades.CONTRATOADENDAPERSONALs.Count(c => c.IdPersonal == epersonal.IdPersonal);
            //var periodoLaboral = entidades.PERIODOLABORALs.Single(p => p.IdPersonal==epersonal.IdPersonal);
            periodoLaboral = entidades.PERIODOLABORALs.Count(p => p.IdPersonal == epersonal.IdPersonal);
            try
            {
                if (epersonal != null && (contratos.ToString() == "0") && (periodoLaboral.ToString() == "0"))
                {
                    //var context = new SistIntFoncreagroEntities();
                    entidades.PERSONALs.DeleteObject(epersonal);
                    //context.PERSONALs.DeleteObject(epersonal);
                    entidades.SaveChanges();
                    return Content("OK");
                }
                return Content("Error");
            }
            catch (Exception e)
            {
                strResponse = "{success: false,msg:'" + e.Message + "'}";
                return Content(strResponse);
            }
        }

        public ActionResult ReportaAsistencia()
        {
            int IdPersonal = -1;
            if (!String.IsNullOrEmpty(Request.QueryString["IdPersonal"]))
            {
                IdPersonal = Convert.ToInt32(Request.QueryString["IdPersonal"]);
            }
            DateTime FechaInicio=Convert.ToDateTime(Request.QueryString["FechaInicio"]);
            DateTime FechaFin = Convert.ToDateTime(Request.QueryString["FechaFin"]);

            int IdProyecto=-1;
            if (!String.IsNullOrEmpty(Request.QueryString["IdProyecto"]))
            {
                IdProyecto = Convert.ToInt32(Request.QueryString["IdProyecto"]);
            }

            var listaAsistencias = entidades.PAAsistenciaPersonal(IdPersonal, FechaInicio, FechaFin, IdProyecto).ToList();
            return Json(new { grid = listaAsistencias, total = listaAsistencias.Count() }, JsonRequestBehavior.AllowGet);

        }

        [HttpPost]
        public ActionResult SubirExcel(HttpPostedFileBase fileData)
        {
            string strResponse = String.Empty;

            try
            {
                if (fileData != null)
                {
                    fileData.SaveAs(Server.MapPath("~/Content/Excel/") + Path.GetFileName(fileData.FileName));
                    OleDbConnection connection;
                    SqlBulkCopy bulkCopy;


                    string strConnString = ConfigurationManager.ConnectionStrings["ASPNETDB"].ConnectionString;
                    //string ConnectionString = @"server=LPFONCRE33\SQLEXPRESS;database=SistIntFoncreagro;uid=sa;pwd=Foncre@gro2012;";
                        
                    string connstr="";
                    string cadena = "";

                    if (fileData.FileName.Trim().EndsWith(".xlsx"))
                    {
                        connstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", Convert.ToString(Server.MapPath("~/Content/Excel/" + Path.GetFileName(fileData.FileName))));
                        cadena = fileData.FileName.Substring(0, fileData.FileName.Length - 5);
                    }
                    else 
                        if (fileData.FileName.Trim().EndsWith(".xls"))
                        {
                            cadena = fileData.FileName.Substring(0, fileData.FileName.Length - 4);
                            connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", Convert.ToString(Server.MapPath("~/Content/Excel/" + Path.GetFileName(fileData.FileName))));
                        }
                        else
                        {
                            cadena = fileData.FileName;
                            connstr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR=No;FMT=Delimited(,)';", Convert.ToString(Server.MapPath("~/Content/Excel/")));
                        }

                    Console.WriteLine(cadena);
                    Console.WriteLine(connstr);

                    strResponse = "{success: true,msg:'" + connstr + "'}";

                    using (connection = new OleDbConnection(connstr))
                    {
                        //cambiar [Sheet1$] con el nombre de la hoja del excel
                        
                        OleDbCommand command;

                        if (fileData.FileName.Trim().EndsWith(".CSV") || fileData.FileName.Trim().EndsWith(".csv"))
                            { command = new OleDbCommand("Select * FROM [" + cadena + "]", connection); }
                        else
                            { command = new OleDbCommand("Select * FROM [" + cadena + "$A1:E65536]", connection); }

                        connection.Open();
                        strResponse = "{success: true, msg: despues de coneccion'" + command.CommandText + "'}";
                        // Create DbDataReader to Data Worksheet
                        using (OleDbDataReader dr = command.ExecuteReader())
                        {
                            using (bulkCopy = new SqlBulkCopy(strConnString)) //ConnectionString
                            {
                                /*bulkCopy.ColumnMappings.Add("Machine ID", "Machine ID");
                                bulkCopy.ColumnMappings.Add("Card ID", "Card ID");
                                bulkCopy.ColumnMappings.Add("Event", "Event");
                                bulkCopy.ColumnMappings.Add("Date", "Date");
                                bulkCopy.ColumnMappings.Add("Time", "Time");*/
                                bulkCopy.DestinationTableName = "TBLAsistenciaTemp";
                                bulkCopy.WriteToServer(dr);
                                strResponse = "{success: true,msg: TBLAsistenciaTemp'" + Convert.ToString(dr.FieldCount) + "'}";
                            }
                            dr.Close();
                        }
                    }

                    bulkCopy.Close();
                    connection.Close();
                    strResponse = "{success: true,msg: Antes de Procedure'}";
                    entidades.PAInsertarTBLAsistencia();
                    System.IO.File.Delete(Server.MapPath("~/Content/Excel/") + Path.GetFileName(fileData.FileName));
                }
                string nombre = fileData.FileName.ToString();
                strResponse = "{success: true,msg:'El Archivo " + nombre + " Se ha Procesado Correctamente'}";
                return Content(strResponse);
            }

            catch (Exception e)
            {
                string sms = e.Message;
                strResponse = "{success: false,msg:\"" + sms + "\"}";
                return Content(strResponse);
            }
        }


        public ActionResult Reportdv()
        {

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/RptPersona.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RptPERSONAS(1));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension = "xls";
            String deviceInfo = "";
            /*  string deviceInfo =
               "<DeviceInfo>" +
            "  <OutputFormat>EXCEL</OutputFormat>" +
            "  <PageWidth>10in</PageWidth>" +
            "  <PageHeight>15in</PageHeight>" +
            "  <MarginTop>0in</MarginTop>" +
            "  <MarginLeft>0in</MarginLeft>" +
            "  <MarginRight>0in</MarginRight>" +
            "  <MarginBottom>0in</MarginBottom>" +
            "</DeviceInfo>";*/
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=ReportePersonal.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }



    }
}
